package ${baseInfo.packageName};

import ${tableClass.fullClassName};
import ${service.packageName}.${service.fileName};
import ${columnEnum.packageName}.${columnEnum.fileName};
import lombok.Setter;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Collection;

/**
 * 针对表【${tableClass.tableName}<#if tableClass.remark?has_content>(${tableClass.remark!})</#if>】的数据库操作Service实现
 *
 * @author MyBatisX Generator
 * @see ${service.fileName}
 */
@RestController
@RequestMapping("/${tableClass.tableName?replace('_','-')}")
public class ${baseInfo.fileName} {

    @Setter(onMethod_ = @Resource)
    private ${service.fileName} service;

<#if (columnEnum)??>
    @PostMapping("/list-specified-fields")
    public Collection<${tableClass.shortClassName}> listSpecifiedFields(@RequestBody ${tableClass.shortClassName} query){
        return this.service.listSpecifiedFields(query, ${columnEnum.fileName}.values());
    }
</#if>

    @PostMapping("/batch-save-selective")
    public void batchSaveSelective(@RequestBody ${'Collection<'+tableClass.shortClassName+'>'} domains){
        this.service.batchSaveSelective(domains);
    }

    /**
     * 保存记录，忽略id,createdAt,updatedAt等字段

     * @param domain 待处理的数据
     * @return 更新成功记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/save")
    public int save(@RequestBody ${tableClass.shortClassName} domain){
        return this.service.save(domain);
    }

    /**
     * 保存记录，如果存在主键、唯一键冲突，则进行数据更新

     * @param domain 待处理的数据
     * @return 更新成功记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/save-on-duplicate-key")
    public int saveOnDuplicateKey(@RequestBody ${tableClass.shortClassName} domain){
        return this.service.saveOnDuplicateKey(domain);
    }

    /**
     * 根据domain中提供的主键id进行数据更新

     * @param domain 待更新的数据
     * @return 更新成功的数量
     * @author MyBatisX Generator
     */
    @PostMapping("/update")
    public int update(@RequestBody ${tableClass.shortClassName} domain){
        return this.service.update(domain);
    }

    /**
     * 根据主键更新非主键字段

     * @param query 待处理的数据
     * @return 更新成功记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/update-selective-by-pk")
    public int updateSelectiveByPk(@RequestBody ${tableClass.shortClassName} query){
        return this.service.updateSelectiveByPk(query);
    }

    /**
     * 根据id移除记录，软删除，将deleted设置成1

     * @param pk 待插入的数据集合
     * @return 删除的记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/remove-by-pk")
    public int removeByPk(@RequestBody Long pk){
        return this.service.removeByPk(pk);
    }

    /**
     * 根据id移除记录，批量软删除，将deleted设置成1
     *
     * @param pkList 待插入的数据集合
     * @return 删除的记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/remove-by-pk-list")
    public int removeByPkList(@RequestBody Collection<${'Long'}> pkList){
        return this.service.removeByPkList(pkList);
    }

    /**
     * 根据id删除记录
     *
     * @param pk 待插入的数据集合
     * @return 删除的记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/delete-by-pk")
    public int deleteByPk(@RequestBody Long pk){
        return this.service.deleteByPk(pk);
    }

    /**
     * 根据id列表批量删除记录
     *
     * @param pkList 待插入的数据集合
     * @return 删除的记录数
     * @author MyBatisX Generator
     */
    @PostMapping("/delete-by-pk-list")
    public int deleteByPkList(@RequestBody Collection<${'Long'}> pkList){
        return this.service.deleteByPkList(pkList);
    }

    /**
     * 根据主键，查询记录
     *
     * @param pk 主键
     * @return 更新成功的数量
     * @author MyBatisX Generator
     */
    @PostMapping("/table-class")
    public ${tableClass.shortClassName} get(@RequestBody Long pk){
        return this.service.get(pk);
    }

    /**
     * 查询条件
     *
     * @param query 查询条件
     * @return 查询记录
     * @author MyBatisX Generator
     */
    @PostMapping("/list")
    public ${'Collection<'+tableClass.shortClassName+'>'} list(@RequestBody ${tableClass.shortClassName} query){
        return this.service.list(query);
    }
}




